﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Data.SqlClient;
using System.Data;
using TSL_Tools.SqlTools;
using ReportingEngine;
using System.IO;
using System.Text.RegularExpressions;


namespace ReportingEngine
{
    //public partial class TSL_ReportingEngine
    //{
    //    public bool byInterval = false;
    //    public bool detailedTimingAvailable = false;
    //    public bool includeFailedPages = true;
    //    public bool includeWarmup = false;
    //    public int currentlyHighlightedRunId = -1;
    //    public string TableFilterString = "%";
    //    public int numTopSlowest = 10;
    //    public string intervalColumnSelectedValue = "Average";

    //    //public TSL_ReportingEngineTables()
    //    //{

    //    //}
    //    #region -- Main Generate data Methods ----------------------------------------------------------------------------
    //    public void GenerateRunData_TEST()
    //    {
    //        //bool byInterval = (bool)btnToggleUseIntervals.IsChecked;
    //        ////bool useDetailedTiming = Properties.Settings.Default.UseDetailedTimingsForTablesWhenAvailable;
    //        //bool detailedTimingAvailable = re.listOfRuns[currentlyHighlightedRunId].resultTypes.HasFlag(ResultTypesStoredInLoadTest.ContainsDetailedTimingInfo);


    //        DataTable _table = new DataTable();
    //        if (byInterval && detailedTimingAvailable)
    //            GenerateRunData_interval(TSL_ReportingEngine.Sql_INTERVAL_TESTRESULTS, "Test Name");
    //        else
    //            GenerateRunData(TSL_ReportingEngine.Sql_SUMMARY_TESTRESULTS, ref _table, false, "Test Name");
    //    }

    //    public void GenerateRunData_TRANSACTION()
    //    {
    //        DataTable _table = new DataTable();

    //        if (byInterval && detailedTimingAvailable)
    //            GenerateRunData_interval(TSL_ReportingEngine.Sql_INTERVAL_TRANSACTIONRESULTS, "Transaction Name");
    //        else
    //            GenerateRunData(TSL_ReportingEngine.Sql_SUMMARY_TRANSACTIONRESULTS, ref _table, false, "Transaction Name");
    //    }

    //    public void GenerateRunData_PAGE()
    //    {
    //        DataTable _table = new DataTable();
    //        if (byInterval && detailedTimingAvailable)
    //            GenerateRunData_interval(TSL_ReportingEngine.Sql_INTERVAL_PAGERESULTS, "Page Name");
    //        else
    //            GenerateRunData(TSL_ReportingEngine.Sql_SUMMARY_PAGERESULTS, ref _table, false, "Page Name");
    //    }

    //    public void GenerateRunData_TRANSACTION_COMBINED()
    //    {
    //        int numRows = 0;

    //        string sqlCmd = String.Format(TSL_ReportingEngine.Sql_TRANSACTIONRESULTS_GROUPEDBYNAME,
    //            currentlyHighlightedRunId,
    //            TableFilterString,
    //            "NULL",
    //            "NULL",
    //            0,
    //            0,
    //            includeWarmup,
    //            numTopSlowest);
    //        DataTable _table;
    //        TalkToSql tts = new TalkToSql(sqlConn);
    //        TimeSpan ts = tts.ExecuteReaderTable(sqlCmd, out _table);
    //        mostRecentSqlQuery = sqlCmd;
    //        numRows = _table.Rows.Count;
    //    }

    //    public void GenerateRunData_PAGE_COMBINED()
    //    {
    //        string sqlCmd = String.Format(TSL_ReportingEngine.Sql_PAGERESULTS_GROUPEDBYNAME, currentlyHighlightedRunId, TableFilterString,
    //            "NULL", "NULL", includeFailedPages, 0, includeWarmup, "NULL", numTopSlowest);
    //        DataTable _table;
    //        TalkToSql tts = new TalkToSql(sqlConn);
    //        TimeSpan ts = tts.ExecuteReaderTable(sqlCmd, out _table);
    //        mostRecentSqlQuery = sqlCmd;
    //    }
    //    #endregion

    //    #region -- Timing Generation Routines ----------------------------------------------------------------------------
    //    public void GenerateRunData(string sqlQuery, ref DataTable _table, bool addToReport, string columnName)
    //    {
    //        string sqlCmd = String.Format(sqlQuery, currentlyHighlightedRunId, TableFilterString,
    //            "NULL", "NULL", includeFailedPages, 1, includeWarmup, numTopSlowest);
    //        TalkToSql tts = new TalkToSql(sqlConn);
    //        TimeSpan ts = tts.ExecuteReaderTable(sqlCmd, out _table);
    //        mostRecentSqlQuery = sqlCmd;
    //    }

    //    public TimeSpan GenerateRunData_interval(string baseSqlCmd, string columnName)
    //    {
    //        DateTime dt = DateTime.Now;
    //        int numRows = 0;

    //        List<int[]> intervals = new List<int[]>();
    //        GetConstantLoadIntervals(out intervals, currentlyHighlightedRunId);

    //        DataTable finalTable = new DataTable();
    //        bool addNameColumn = true;

    //        foreach (int[] interval in intervals)
    //        {
    //            string sqlCmd = String.Format(baseSqlCmd, currentlyHighlightedRunId, TableFilterString,
    //                interval[0], interval[1], includeFailedPages, 0, includeWarmup, numTopSlowest);
    //            DataTable _table;
    //            TalkToSql tts = new TalkToSql(sqlConn);
    //            tts.ExecuteReaderTable(sqlCmd, out _table);
    //            mostRecentSqlQuery = sqlCmd;
    //            if (addNameColumn)
    //            {
    //                AddNameColumnsToExistingTable(ref _table, ref finalTable, "Name", columnName);
    //                addNameColumn = false;
    //            }
    //            string valueColumnName = String.Format("{0} users\r\n{1}-{2} sec\r\n{3} Time"
    //                , interval[2], interval[0], interval[1], intervalColumnSelectedValue);
    //            AddColumnsToExistingTable(ref _table, ref finalTable, intervalColumnSelectedValue, valueColumnName);
    //        }
    //        return (TimeSpan)(DateTime.Now - dt);
    //    }
    //    #endregion

    //    #region -- DataTable Routines ----------------------------------------------------------------------------
    //    private void AddNameColumnsToExistingTable(ref DataTable sourceTable, ref DataTable destTable, string srcColumnName, string destColumnName)
    //    {
    //        destTable.Columns.Add("id");
    //        destTable.Columns.Add(destColumnName);
    //        if (destTable.Rows.Count == 0) // No data. Need to ADD the rows
    //        {
    //            for (int x = 0; x < sourceTable.Rows.Count; x++)
    //                destTable.Rows.Add(sourceTable.Rows[x][0], sourceTable.Rows[x][srcColumnName]);
    //        }
    //    }

    //    private void AddColumnsToExistingTable(ref DataTable sourceTable, ref DataTable destTable, string srcColumnName, string destColumnName)
    //    {
    //        destTable.Columns.Add(destColumnName);
    //        if (destTable.Rows.Count == 0) // No data. Need to ADD the rows
    //        {
    //            throw new Exception("Error in building the interval timings: " + srcColumnName);
    //        }
    //        else
    //        {
    //            try
    //            {
    //                for (int x = 0; x < sourceTable.Rows.Count; x++)
    //                {
    //                    int destTableRowNum = GetRowNumberForEntry(ref destTable, 0, sourceTable.Rows[x][0].ToString());
    //                    if (destTableRowNum != -1)
    //                        destTable.Rows[destTableRowNum][destColumnName] = sourceTable.Rows[x][srcColumnName];
    //                    else
    //                    {
    //                        destTable.Rows.Add(sourceTable.Rows[x][0]);
    //                        destTable.Rows[sourceTable.Rows.Count - 1][destColumnName] = sourceTable.Rows[x][srcColumnName];
    //                    }
    //                }
    //            }
    //            catch (IndexOutOfRangeException ex)
    //            {
    //                Console.Write(ex.ToString());
    //            }
    //        }
    //    }

    //    private int GetRowNumberForEntry(ref DataTable _table, int column, string comparator)
    //    {
    //        for (int x = 0; x < _table.Rows.Count; x++)
    //        {
    //            if (_table.Rows[x][column].ToString() == comparator)
    //                return x;
    //        }

    //        return -1;
    //    }
    //    #endregion
    //}
}


